LINQ (Language Integrated Query) ব্যবহার করার সময়, আপনি ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার করে আরও কার্যকরী এবং জটিল কুয়েরি তৈরি করতে পারেন।
- ফিল্টারিং (Filtering) হল ডেটাসেট থেকে নির্দিষ্ট শর্তের ভিত্তিতে তথ্য নির্বাচন করা। LINQ এ এটি সাধারণত
whereক্লজের মাধ্যমে করা হয়। - প্রজেকশন (Projection) হল ডেটার নির্দিষ্ট অংশ নির্বাচন বা পরিবর্তন করা, যেমন কোনো অবজেক্টের কিছু ফিল্ড নির্বাচন করা বা নতুন অবজেক্ট তৈরি করা।
এই দুটি কৌশল একত্রে ব্যবহার করলে, আপনি একটি ডেটাসেট থেকে নির্দিষ্ট শর্ত পূরণকারী তথ্য নির্বাচন করতে পারবেন এবং সেই তথ্যের কিছু অংশ বা রূপান্তরিত সংস্করণ প্রদর্শন করতে পারবেন।
ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার
LINQ এর where ক্লজ এবং select ক্লজ ব্যবহার করে ফিল্টারিং এবং প্রজেকশন একত্রে করা যায়। নিচে একটি উদাহরণ দেয়া হল যেখানে একটি লিস্ট থেকে even numbers ফিল্টার করা হয়েছে এবং তারপর তাদের স্কয়ার (square) নেয়া হয়েছে।
উদাহরণ:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Filter (even numbers) এবং Projection (square) একত্রে ব্যবহার
var result = from num in numbers
where num % 2 == 0 // ফিল্টারিং: even numbers
select num * num; // প্রজেকশন: স্কয়ার
foreach (var square in result)
{
Console.WriteLine(square); // Output: 4, 16, 36, 64, 100
}
এখানে:
where num % 2 == 0শর্তটি ফিল্টারিং করতে ব্যবহৃত হয়েছে, যার মাধ্যমে শুধুমাত্র even numbers নির্বাচন করা হয়েছে।select num * numহল প্রজেকশন, যা নির্বাচন করা সংখ্যাগুলোর স্কয়ার বের করছে।
আরও জটিল উদাহরণ: অবজেক্টের ফিল্টারিং এবং প্রজেকশন
ধরা যাক, আমাদের কাছে একটি Employee ক্লাস আছে এবং আমরা একটি তালিকা থেকে age 30 এর বেশি এমন কর্মীদের নাম এবং বয়স বের করতে চাই।
উদাহরণ:
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public string Position { get; set; }
}
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Alice", Age = 35, Position = "Manager" },
new Employee { Name = "Bob", Age = 28, Position = "Developer" },
new Employee { Name = "Charlie", Age = 42, Position = "CEO" },
new Employee { Name = "David", Age = 25, Position = "Intern" },
};
// Filter (age > 30) এবং Projection (Name এবং Age) একত্রে ব্যবহার
var result = from emp in employees
where emp.Age > 30 // ফিল্টারিং: age > 30
select new { emp.Name, emp.Age }; // প্রজেকশন: Name এবং Age
foreach (var emp in result)
{
Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}");
}
এখানে:
where emp.Age > 30শর্তটি ফিল্টারিং করতে ব্যবহৃত হয়েছে, যার মাধ্যমে শুধুমাত্র 30 এর বেশি বয়সের কর্মী নির্বাচন করা হয়েছে।select new { emp.Name, emp.Age }হল প্রজেকশন, যা শুধুমাত্র কর্মীর নাম এবং বয়স রিটার্ন করছে।
আউটপুট:
Name: Alice, Age: 35
Name: Charlie, Age: 42
একাধিক শর্তে ফিল্টারিং এবং প্রজেকশন
আপনি একাধিক শর্তও যোগ করতে পারেন, যেমন কর্মীর বয়স 30 এর বেশি হতে হবে এবং তার পদের নাম Manager অথবা CEO হতে হবে। এক্ষেত্রে ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার করা হবে।
উদাহরণ:
var result = from emp in employees
where emp.Age > 30 && (emp.Position == "Manager" || emp.Position == "CEO") // একাধিক শর্ত
select new { emp.Name, emp.Age, emp.Position };
foreach (var emp in result)
{
Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}, Position: {emp.Position}");
}
আউটপুট:
Name: Alice, Age: 35, Position: Manager
Name: Charlie, Age: 42, Position: CEO
এখানে:
where emp.Age > 30 && (emp.Position == "Manager" || emp.Position == "CEO")একাধিক শর্তে ফিল্টারিং করা হয়েছে।select new { emp.Name, emp.Age, emp.Position }দ্বারা প্রজেকশন করা হয়েছে, যাতে কর্মীর নাম, বয়স এবং পদের নাম রিটার্ন করা হয়।
সারাংশ
LINQ এ ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার করা ডেটা কুয়েরি করার একটি শক্তিশালী উপায়। ফিল্টারিং (যেমন where ক্লজ ব্যবহার করে) আপনাকে নির্দিষ্ট শর্তে ডেটা নির্বাচন করতে সাহায্য করে, এবং প্রজেকশন (যেমন select ক্লজ ব্যবহার করে) আপনাকে ডেটার নির্দিষ্ট অংশ বা রূপান্তরিত ডেটা প্রাপ্ত করতে সহায়তা করে। একত্রে এই দুটি কৌশল ব্যবহার করলে, আপনি খুবই কার্যকরী এবং শক্তিশালী ডেটা কুয়েরি তৈরি করতে পারবেন।